package Service;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import pojo.*;

import java.math.BigInteger;
import java.util.List;



public interface userService {

    /* 通过用户id查询用户*/
    public user queryUserByid(Long user_id);

    /*注册
    @param studentID 用户id
    @param name 学生姓名
    @param password 用户密码
    @return 返回成功标志，1表示成功，0表示失败
     */
    public int register(String studentID,String name,String pwd);

    /*登陆验证
     * @param studentId 用户Id
     * @param password 用户密码
     * @return 成功返回1 否则返回0*/
    public int loginIn(String studentId,String password);

    public user queryUserByStudentId(String studentId);




    /*通过运动类别来查询匹配的房间信息
    @param sports_id 运动的类别
    1篮球 2网球 3足球 4乒乓球 5羽毛球 6排球 7棒球 8毽子
    @return 返回查询到的房间列表
     */
    public List<room> queryMatchingRoomByCategory(String sports_id);


    public List<room> queryMatchingRoom();



    /* 房间其他用户信息
    * @param room_id 要查询的房间id
    * @return 返回查询到的用户信息*/
    public  List<user> LookOtherUser(Long room_id);



    /*通过room_id查询房间
    @param room_id 要查询房间id
    @return 返回查询到的房间信息
     */
    public room queryRoomByRoomID(Long room_id);

    /*改变房间的状态
    @param room_id
    @param state
    @return 成功返回1 否则0
     */
    public int updateRoomState(Long roomId,int roomstate);




    /*查询用户的个人信息
    @param user_ID 用户id
    @return 返回查询到的用户实体类对象
     */
    public user queryInformationByID(Long user_id);



    /*加入一个房间
    @param user_id 用户id sport_id 运动类别 room_id 房间号
    @return 成功成功 失败则返回错误信息提示
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public int joinRoom(Long user_id, String sport_id,Long room_id);



    /*查询用户所有房间信息
    * @param user_id 用户id
    * @return 返回用户参与的房间列表*/
    public List<room> queryUserOrder(Long user_id);


    /* 根据房间状态查询房间信息
    @param user_id 用户id
    @param roomstate 房间状态 0 匹配 1已匹配 2已完成
     */
    public List<room> queryOrderByState(Long user_id, int roomstate);


    /*创建房间
    @param host_id 房主的id
    @param capacity 房间的容量
    @param date 日期
    @param stadium 场馆
    @param playground 场地
    @sports_id 运动类别
    @param begintime
    @param endtime
    @return 创建成功返回房间id 0表示失败
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public Long createRoom(Long host_id,int capacity,String sport_id,String date,String stadium,String playground,int begintime,int endtime);




    /*删除房间
    @param roomId 房间id
    @return  成功返回1 否则返回0
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public int deleteRoom(Long roomId);


    /*退出房间
    @param roomID 退出房间id userId 用户id
    @return 成功返回1 否则返回0
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public int exitRoom(Long roomId,Long userId);

    /*更改用户头像
    @Param Long studentID用户ID
    @Param String url 用户头像地址
     */
    public int  updatePhotoUrl(String studentID,String photoURL);



    /*根据运动类型查询场馆信息
    @param sportID 运动类型
    @return  返回场馆列表
     */
    public List<stadium> queryStadiumsByCategory(String sportID);



    /*通过体育馆和运动类型去查询场地列表
    @param stadiumName 运动场馆名字
    @param category 运动类别
    @return 返回场地信息
     */
    public  List<playground> queryPlaygroundByStadiumName(String stadiumName,String category);


    /*查询可预约的时间段
    @param playgroundName所预约的场馆的名字
    @param stadiumName 体育馆的名字
    @param date 查询的日期
    @return 返回不同的时间段 如6:00-7:00
     */
    public String queryLeisureTime(String playgroundName,String stdiumName,String date);

    /* 接受用户发送的信息并记录
    @param userID,roomId,content
    @return success or not
     */
    public int addUserMessage(Long userID, Long roomId, String content);

    /* 通过roomID查询当前房间所有记录
    @param roomID
    @return 房间内所有Message
     */
    public List<message> queryMessageByRoomId(Long roomId);
}
